import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * El Dog unicamente es el compañero del usuario el cual se mostrara de vez en cuando.
 * 
 * @author Ulises Yamil Castorena
 * @version 1.0
 */
public class Dog extends Actor
{
    private GreenfootImage img [];//Arreglo que contiene las imagenes del dog.
    private GreenfootSound fail;//Varible que guarda un sonido.
    private boolean aparecer;//Variable que indica el momento en el que aparece.
    private boolean activate;//Variable para uso de bandera.
    private int cont;//Variable que indica la imagen a colocar.
    private int ava;//Variable de contador.
    private int pasos;//Variable de contador.
    private int tipo;//Variable que indica el tipo de perro a mostrar.
    
    /**
     * Constructor de la clase Dog.
     * @param valor Entero que indica el tipo de perro a mostrar.
     */
    public Dog(int valor)
    {        
        aparecer = true;
        activate = false;
        cont = 0;
        ava = 0;
        pasos = 0;        
        tipo = valor;
        img = new GreenfootImage[12];
        fail = new GreenfootSound("fail.mp3");
        for(int a = 0;a < 12;a++)
            img[a] = new GreenfootImage(a + "p.png");
    }
    
    /**
     * Método Act de la clase.
     */
    public void act() 
    {
        switch(tipo)
        {
            case 0:            
                if(aparecer)        
                    apareceIntro();                    
                else    
                    getWorld().removeObject(this);
            break;
            case 1:
                apareceFin();
            break;
            case 2:
                apareceGanaste();
            break;
        }
    }
    
    /**
     * Método que muestra al perro, solamente cuando se haya ganado.
     */
    public void apareceGanaste()
    {
        if(!activate)
        {
            activate = true;
        }
        else        
            setImage(img[9]);        
    }
    
    /**
     * Este método hace aparecer al perro al final de cada nivel.
     */
    public void apareceFin()
    {               
        if(!activate)
        {
            fail.play();
            cont = 10;
            activate = true;
        }
        else
        {
            setImage(img[cont]);     
            ava++;
            if(ava == 3)
            {
                if(cont == 11)
                    cont --;
                else if(cont == 10)
                    cont++;
                ava = 0;
            }
        }
    }
    
    /**
     * Al iniciar el juego el perro aparece, este método hace posible esto, también indica el timpo de espera para el dog.
     */
    public void apareceIntro()
    {           
        if(!activate)
        {
            if(ava < 20)
            {
                pasos++;        
                setImage(img[cont]);
                if(pasos == 3)
                {
                    cont++;
                    pasos = 0;
                    move(4);
                    ava++;
                    if(cont == 4)
                        cont = 0;
                }
            }
            else
            {
                cont = 5;
                pasos = 0;
                activate = true;
            }          
        }
        else 
        {            
            if(pasos < 7)
                pasos++;
            setImage(img[5]);
            if(pasos == 7)
            {   
                setImage(img[6]);
                setImage(img[7]);
                aparecer = false;
            }
        }  
    }
}
